#include<bits/stdc++.h>
using namespace std;
int main(){
  freopen("mcmf.in","r",stdin);
  freopen("mcmf.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  int n,X=0; bool f=true; cin>>n;
  vector<vector<int> > a(n);
  for(auto &s:a){
    int k; cin>>k,s.resize(k),f&=k==1;
    for(auto &i:s)cin>>i,i--,X=max(X,i);
    reverse(s.begin(),s.end());
  }
  sort(a.begin(),a.end(),greater<>());
  vector<int> b(n+X+1);
  if(f){
    for(auto s:a){
      int l=s[0]; while(b[l])l++; b[l]=1;
    }
  }
  else if(n==2){
    set<int> t(a[0].begin(),a[0].end()),
      t2(a[1].begin(),a[1].end());
    int w=-1;
    for(int i:a[1])
      if(t.find(i)!=t.end()){w=i; break;}
    if(~w){
      for(int i=w+1;;i++)
        if(t.find(i)==t.end()&&t2.find(i)==t2.end()){
          b[i]=1; for(int j:a[1])b[j]=1; break;
        }
    }
    else{
      for(int i:a[0])b[i]=1;
      for(int i:a[1])b[i]=1;
    }
  }
  else{
    vector<int> v(n+X+1);
    iota(v.begin(),v.end(),0);
    for(int i=0;i<n;i++){
      int l=0,r=v.size()-1;
      auto pd=[&](int x){
        set<int> s(v.begin(),v.begin()+x+1);
        for(int j=i;j<n;j++){
          set<int> d;
          for(int ps=0;ps<a[j].size();ps++){
            int k=a[j][ps];
            auto p=s.lower_bound(k);
            if(!ps&&!s.empty())p=prev(s.end());
            if(p==s.end())return false;
            int x=*p; s.erase(p),d.emplace(x);
            if(x<k)return false;
            if(x>k){
              while(!d.empty()&&*d.begin()<x)
                s.emplace(*d.begin()),d.erase(d.begin());
              break;
            }
          }
        }
        return true;
      };
      while(l<r){
        int m=l+r>>1;
        if(pd(m))r=m;
        else l=m+1;
      }
      set<int> s(v.begin(),v.begin()+r+1),d;
      for(int ps=0;ps<a[i].size();ps++){
        int k=a[i][ps];
        auto p=s.lower_bound(k);
        if(!ps&&!s.empty())p=prev(s.end());
        int x=*p; b[x]=1,s.erase(p),d.emplace(x);
        if(x>k){
          while(!d.empty()&&*d.begin()<x)
            b[*d.begin()]=0,s.emplace(*d.begin()),d.erase(d.begin());
          break;
        }
      }
      v=vector<int>(s.begin(),s.end());
    }
  }
  f=false;
  for(int i=n+X;~i;i--){
    if(b[i])f=true;
    if(f)cout<<b[i];
  }
  cout<<endl;
  return 0;
}